<!DOCTYPE html>
<html lang='en'>
<head>
    <meta charset='UTF-8'>
     <meta name='viewport' content='width=device-width, initial-scale=1.0'>
     <title>数组去重比较优秀的两种方式</title>
     <link rel='stylesheet' href='//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/styles/default.min.css'>
     <script src='//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js'></script>
</head>
<body>
     <pre>
        <code style='max-height: 400px;'>
            /** 数组去重比较优秀的两种方式 */
            // 方案一: 不会改变原数组 和视频里面讲的不太一样 同理也是利用数组里面的键不能重复 因此使用数组里面的值作为 键和值 以此达到去重
            let arrList = [1,2,3,3,2,1,2,3,1,2,3,1,2,4,6,4,8,2,1,3,4,5,1,56,'张三',[1,2,3],[1,2,3]]
            function uniq(nums){
                let obj = {}
                for(let i = 0; i < nums.length ; i++) {
                    obj[nums[i]] = nums[i]
                }
                return Object.values(obj)
            }
            console.log('uniq',uniq(arrList),'原数组',arrList);

            /** 方案二：视频里面的方法 */
            function _uniq(nums){
                let obj = {}
                for(let j = 0;j < nums.length;j++){
                    // 说明已经存在这一项
                    if(obj[nums[j]] !== undefined){
                        nums.splice(j,1)
                        j--
                    }
                    obj[nums[j]] = nums[j]
                }
                return nums
            }
            console.log('_uniq',_uniq(arrList));

            // 方案三：基于es6的数组去重  -->  里面包含二维数组不能达到去重效果会保留数组内部的数组信息
            // let arrListA = [1,2,3,3,2,1,[1,2,3],2,3,1,2,3,1,2,4,6,4,8,2,1,3,4,5,1,56,'张三',[1,2,3],[1,2,3]]
            let arrListA = [1,2,3,3,2,1,2,3,1,2,3,1,2,4,6,4,8,2,1,3,4,5,1,56,'张三']
            console.log('es6的数组去重使用Set',[...new Set(arrListA)]);
        </code>
     </pre>
     <script> hljs.highlightAll(); </script>
     <script>
        /** 数组去重比较优秀的两种方式 */
        // 方案一: 不会改变原数组 和视频里面讲的不太一样 同理也是利用数组里面的键不能重复 因此使用数组里面的值作为 键和值 以此达到去重
        let arrList = [1,2,3,3,2,1,2,3,1,2,3,1,2,4,6,4,8,2,1,3,4,5,1,56,'张三',[1,2,3],[1,2,3]]
        function uniq(nums){
            let obj = {}
            for(let i = 0; i < nums.length ; i++) {
                obj[nums[i]] = nums[i]
            }
            return Object.values(obj)
        }
        console.log('uniq',uniq(arrList),'原数组',arrList);

        /** 方案二：视频里面的方法 */
        function _uniq(nums){
            let obj = {}
            for(let j = 0;j < nums.length;j++){
                // 说明已经存在这一项
                if(obj[nums[j]] !== undefined){
                    nums.splice(j,1)
                    j--
                }
                obj[nums[j]] = nums[j]
            }
            return nums
        }
        console.log('_uniq',_uniq(arrList));

        // 方案三：基于es6的数组去重  -->  里面包含二维数组不能达到去重效果会保留数组内部的数组信息
        // let arrListA = [1,2,3,3,2,1,[1,2,3],2,3,1,2,3,1,2,4,6,4,8,2,1,3,4,5,1,56,'张三',[1,2,3],[1,2,3]]
        let arrListA = [1,2,3,3,2,1,2,3,1,2,3,1,2,4,6,4,8,2,1,3,4,5,1,56,'张三']
        console.log('es6的数组去重使用Set',[...new Set(arrListA)]);

     </script>
</body>
</html>